草庐IT

Java Swingworker 和多线程

全部标签

C++线程开销

我正在研究C++中的线程,特别是使用它们来并行化映射操作。代码如下:#include#include#include#include#include#includedoublemultByTwo(doublex){returnx*2;}doubledoJunk(doublex){returncos(pow(sin(x*2),3));}templatevoidmap(T*data,intn,T(*ptr)(T)){for(inti=0;ivoidparallelMap(T*data,intn,T(*ptr)(T)){intNUMCORES=3;std::vectorthreads;for

c++ - 从不同的线程、不同的函数写入(登录)同一个文件?

在C++中,有什么方法可以在以下情况下使写入文件线程安全?voidfoo_one(){lock(mutex1);//openfileabc.txt//writeintofile//closefileunlock(mutex1);}voidfoo_two(){lock(mutex2);//openfileabc.txt//writeintofile//closefileunlock(mutex2);}在我的应用程序(多线程)中,foo_one()和foo_two()很可能同时由两个不同的线程执行。有什么方法可以使上述线程安全吗?我考虑过使用文件锁(fcntl和/或lockf)但不确定如何

c++ - 从 Qt 中的多个线程绘制

我正在用Qt编写一个程序,它运行10个工作线程来计算物体在空间中的轨迹。他们还必须绘制对象的路径。我有一个派生QGraphicsEllipseItem的“Body”类,它里面有一个QPainterPath。“模拟”类采用世界上的障碍物列表,模拟并运行body,直到body与某物发生碰撞。模拟在单独的线程中运行(通过moveToThread完成,而不是通过继承QThread)。当body发生碰撞时,模拟会发出一个信号,表明它已完成。当所有线程都完成后,我想绘制路径(我通过调用“Body”中的一个方法来实现,该方法在其draw方法中启用路径绘制)。不幸的是,我收到ASSERT错误:ASSE

c++ - 带 POCO C++ 库的多线程 TCP 服务器

我正在尝试使用POCOC++库开发TCP服务器。我找到了一些例子here.起初我尝试了Alex的示例,但关闭事件不起作用。EchoServer也有同样的问题。所以,然后我尝试了CesarOrtiz示例并遇到了一个不寻常的问题。一段时间后服务器抛出错误:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%["src/ErrorHandler.cpp",line60]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%并且连接出现连接超时错误,新连接也是如此。使用事件处理程序的示例似乎更正确,但我不知道如何修复关机事件。

c++ - 为什么这个简单的线程代码会失败?

我正试图做到这一点,我不能从循环中调用线程。但是当我运行它时,我得到一个运行时错误:terminatecalledafterthrowinganinstanceof'std::system_error'what():InvalidargumentThread#1#include#include#include#include#includestd::mutexm;staticintthread_count;autofoo=[&]{std::lock_guardlock(m);std::cout>threads(20,std::make_shared(foo));for(constaut

c++ - 如何使用 POSIX 线程实现阻塞读取

我想实现一个遵循大致如下接口(interface)的生产者/消费者场景:classConsumer{private:vectorread(size_tn){//Iftheinternalbufferhas`n`elements,thendequeuethem//Otherwisewaitformoredataandtryagain}public:voidrun(){read(10);read(4839);//etc}voidfeed(constvector&more){//Safelyqueuethedata//Notify`read`thatthereisnowmoredata}};

c++ - 当 C++ 线程退出时,内存是否保持分配状态?

我在Linux上使用pthread库。我在线程A中分配一个字符串,然后尝试在线程B中打印该字符串。但是,该字符串只是打印出空字符串(我已验证它在线程A中有效)。注意:该字符串驻留在一个对象内,我怀疑该对象可能正在被清理或重新实例化为空...容器对象没有给我一个段错误或任何东西,只是所有的值都是空的。这是因为线程无法从其他线程访问内存,还是因为线程A停止后内存被取消分配?或者两者都不是;这很可能是我代码中的错误,但我只是想排除这种可能性......更新:原来是内存问题。感谢您的回答,我也有answeredthismyself,如果您同意/不同意,请对我的回答发表评论。

Java新建一个子线程异步运行方法

如何在运行主方法的同时异步运行另一个方法,我是用来更新缓存;1.工具类publicclassThreadPoolUtils{privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(ThreadPoolUtils.class);privatestaticfinalStringPOOL_NAME="thread-im-runner";//等待队列长度privatestaticfinalintBLOCKING_QUEUE_LENGTH=20000;//闲置线程存活时间privatestaticfinalintKEEP_ALIVE_TIME=5*1

c++ - C++中 "main"线程的id

在C++中有没有办法获取“主”程序线程的ID?我看到std::this_thread::get_id()获取当前正在执行的线程的ID,但我需要main的ID,即原始程序线程。我没有看到任何功能来获取它。原因是我有一些非线程安全的内部函数,它们只能在应用程序的原始线程上调用,所以为了安全我想这样做:-assert(std::this_thread::get_id()==std::main_thread::get_id());但是当然没有执行此操作的功能,而且我看不到任何获取该信息的方法。 最佳答案 您可以在this_thread仍然是

c++ - 当运行的线程多于内核时,CUDA 性能会提高

为什么每个block运行超过32个线程时性能会提高?我的显卡有480个CUDA内核(15MS*32SP)。 最佳答案 每个SM有1-4个warp调度器(Tesla=1,Fermi=2,Kepler=4)。每个warp调度程序负责执行分配给SM的warp的子集。每个warp调度程序维护一个符合条件的warp列表。如果warp可以在下一个周期发出指令,则它是合格的。如果warp在数据依赖性上停止,等待获取和指令,或者下一条指令的执行单元正忙,则warp不合格。在每个周期中,每个warp调度程序将从符合条件的warp列表中选择一个warp